import time
from abc import ABC
from turtle import update

from tornado.ioloop import IOLoop
from tornado.web import RequestHandler, url

from views.ViewRouterInterface import ViewRouterInterface


# 用来响应用户/java请求（以下示例展示了Tornado接口的调用顺序，重写了Tornado方法）
class JavaHandler(ViewRouterInterface, RequestHandler, ABC):
    # 重写ＲｅｑｕｅｓｔＨａｎｄｌｅｒ中initialize方法
    # 获取动态设置的参数(greeting,info)
    def initialize(self, greeting, info):  # 动态参数要与url路由中设置的参数必须一样
        print("##############调用了初始化方法：initialize()##################")
        self.greeting = greeting
        self.info = info

    # 预处理，请求体
    def prepare(self):
        print("===========调用了预处理方法：prepare()==================")
        # if self.request.headers.get("Content-Type").startswith("application/json"):
        #     self.json_dict = json.loads(self.request.body)
        # else:
        #     self.json_dict = None

    # @auth_login_redirect
    def get(self, *args, **kwargs):
        print(self.xsrf_token)
        st = self.get_query_argument('name', '')
        print(st)
        # ｗｒｉｔｅ方法只能接受一个字符串类型的参数，但可以通过字符串的拼接实现一个参数
        self.write(self.greeting + ',' + self.info + ' 输入参数：' + str(st))
        # ###防止超时
        IOLoop.instance().add_timeout(time.time() + 3600, update)

    def post(self, *args, **kwargs):
        pass

    def set_default_headers(self):
        print("⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐调用了set_default_headers()⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐")

    def write_error(self, status_code, **kwargs):
        print("※※※※※※※※※※※调用了write_error()※※※※※※※※※※※")

    def on_finish(self):
        print("🔚🔚🔚🔚🔚🔚🔚🔚🔚🔚🔚🔚调用了on_finish()🔚🔚🔚🔚🔚🔚🔚🔚🔚🔚🔚🔚")

    # 定义路由表
    def configRouter(self):
        return [
            # 加上url之后，我们就可以为url设置一个name属性
            url('/java', JavaHandler, {'greeting': '参数1', 'info': '参数2'}, name='java_url')
        ]
